package semant;

import syntaxtree.Program;
import visitor.*;
import errors.ErrorEchoer;

public class TypeChecker
{
    private TypeChecker()
    {
        super();
    }

    public static Env TypeCheck(ErrorEchoer err, Program p)
    {	
    	Env local_env = new Env(err);
    	Visitor vis_recTipo = new VisitorRecuperaTipo(local_env);
    	TypeVisitor vis_cheTipo = new VisitorChecaTipo(local_env);
    	
    	//faz a primeira passada na arvore para preencher a tabela
    	//guarda os erros em local_env
    	p.accept(vis_recTipo);
    	
    	//faz a segunda passada na arvore para checar o tipo
    	//guarda os erros em local_env
    	p.accept(vis_cheTipo);
    	
    	return null;
    }
}
